package done.easy_101_200;

import com.study.common.TreeNode;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * 112. Path Sum
 * <p>
 * 给定一个二叉树和一个目标和，判断该树中是否存在根节点到叶子节点的路径，这条路径上所有节点值相加等于目标和。
 * 说明: 叶子节点是指没有子节点的节点。
 * <p>
 * 示例:
 * 给定如下二叉树，以及目标和 sum = 22，
 * <p>
 * 5
 * / \
 * 4   8
 * /   / \
 * 11  13  4
 * /  \      \
 * 7    2      1
 * <p>
 * 返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5 -> 4 -> 11 -> 2。
 * 2019-03-24 8:02 AM
 **/
@Slf4j
public class PathSum {

    @SuppressWarnings("all")
    public boolean hasPathSum(TreeNode root, int sum) {
        // 190324 first
        // 190529 second 心急做错了
        return false;
    }

    @Test
    public void test() {
        TreeNode root = new TreeNode(5,
                new TreeNode(4,
                        new TreeNode(11,
                                7, 2)),
                new TreeNode(8,
                        13, new TreeNode(4,
                        null, 1)));
        int sum = 18;
        log.info("result:{}", hasPathSum(root, sum));
    }
}




















/*
public boolean hasPathSum(TreeNode root, int sum) {
    // 异常判断
    if (root==null)
        return false;

    // 叶节点
    if (root.left==null && root.right==null && root.val == sum )
        return true;

    // 判断【左子树】or【右子树】是否有某一个能满足要求
    return hasPathSum(root.left, sum - root.val)
            || hasPathSum(root.right, sum - root.val);
}
*/
